home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 42
/
Amiga Format AFCD42 (Issue 126, Aug 1999).iso
/
-serious-
/
sound
/
scope_xt4
/
src
/
scope_xt4.s
< prev
next >
Wrap
Text File
|
1999-05-14
|
24KB
|
1,450 lines
;
;
;-------------------------------
;
; scope_xt4 by Smack/Infect!
;
;-------------------------------
;
;use ASM-One to assemble this code
;enable CPU 68020 and FPU
;
;
incdir hd2:scope_xt4/src/
include os_macros.i
include hardware-registers.i
section code,code
;---DOSLIBRARY-----------------------------------
move.l (4).w,a6
move.l (378,a6),a0 ;LibList
lea (dosname,pc),a1
CALL FindName
move.l d0,(dosbase)
move.l d0,a6
CALL OutPut
move.l d0,a5
move.l a5,d1
move.l #titletxt,d2
moveq #titletxt_end-titletxt,d3
CALL Write
;---CPU FPU CHECK--------------------------------
move.l (4).w,a0
btst #4,(297,a0) ;ATTN_Flags(+1) 68881
bne.b .fpuok
move.l a5,d1
move.l #nofputxt,d2
move.l #nofputxt_end-nofputxt,d3
CALL Write
moveq #10,d0
rts
.fpuok
move.l a5,d1
move.l #precalctxt1,d2
move.l #precalctxt1_end-precalctxt1,d3
CALL Write
bsr fft_init
move.l a5,d1
move.l #precalctxt2,d2
move.l #precalctxt2_end-precalctxt2,d3
CALL Write
moveq #50,d1
CALL Delay
include startup_nocheck.i ;jumps to 'main'
include dummysprites.i
;-------------------------------
dosname dc.b "dos.library",0
dosbase dc.l 0
dc.b "$VER: SCOPE_XT4 1.00 (Sat 01-May-99)",10,0
titletxt
dc.b 27,"[1mSCOPE_XT4 by Smack/Infect! (Sat 01-May-99)",27,"[0m",10,0
titletxt_end
nofputxt
dc.b "no FPU found - sorry.",10,0
nofputxt_end
precalctxt1
dc.b "precalculating table ...",0
precalctxt1_end
precalctxt2
dc.b " ready.",10,0
precalctxt2_end
even
main
;---INIT COPPERLISTS-----------------------------
lea (cl1),a0
bsr dummysprites
lea (cl3),a0
bsr dummysprites
lea (cl1pt+8+2),a0
move.l #wave_screen,d0
move d0,(4,a0)
swap d0
move d0,(a0)
lea (cl2pt+8+2),a0
move.l #spectrum_screen_full1,d0
move d0,(4,a0)
swap d0
move d0,(a0)
lea (cl3pt2+2),a0
move.l #spectrum_screen_tb1,d0
move d0,(4,a0)
swap d0
move d0,(a0)
lea (cl1+2),a0
lea (cl3+2),a1
move.l #function_panel,d0
move.l d0,a5
move d0,(4,a0)
move d0,(4,a1)
swap d0
move d0,(a0)
move d0,(a1)
move #(48<<8)+$bf,(a5)
move #((48-16)<<8)+$02,(64/8,a5)
;---INIT AUDIO TIMING----------------------------
lea ($dff000),a5
move #1,(aud0per,a5)
move #1,(aud1per,a5)
move #140/2,(aud2per,a5)
move #1,(aud2len,a5)
move #64,(aud0vol,a5)
move #64,(aud1vol,a5)
move #0,(aud2vol,a5)
move #0,(aud3vol,a5)
;---INIT PARALLEL PORT---------------------------
lea ($bfd000),a1
move.b #6,($200,a1) ;DDRA SEL and POUT output
move.b #0,($1301,a1) ;DDRB PRB input
move.b #2,(a1) ;PRA POUT signal
or.b #2,($1001,a1) ;FILTER OFF
;---INIT IRQ & DMA-------------------------------
move.l (smppt0,pc),a6
move.l (mainvbr,pc),a0
move.l ($70,a0),(oldlevel4)
move.l #sample_interrupt_nosound,($70,a0)
move.l #frame_interrupt,($6c,a0)
move.l #key_interrupt,($68,a0)
move #$7fff,(adkcon,a5)
move.l #cl1,(cop1lch,a5)
move #1,(copjmp1,a5)
move #$83a4,(dmacon,a5) ;bpl+cop+spr+aud2
move #$c228,(intena,a5) ;audio2+vblank+level2
move #0,(bplcon3,a5)
main_loop
bsr.b check_keyboard
cmp.b #$59,(keytaste) ** F10 down
beq.b .dont
;---DO THE REAL STUFF----------------------------
bsr prepare_sample
move (plot_mode,pc),d0
bne.b .not_wave
bsr plot_wave_spectrum
bra.b .dont
.not_wave
bsr plot_fft8
.dont clr (ready)
cmp.b #$58,(keytaste) ** F9 down
bne.b .ww0
.ww1 move ($dff006),($dff180)
tst (ready)
beq.b .ww1
bra.b main_loop
.ww0 tst (ready)
beq.b .ww0
cmp.b #$c5,(keytaste) ** ESC up
bne.b main_loop
; tst.b (keytaste)
; beq.b main_loop
move #$7fff,($dff000+intena)
move.l (mainvbr,pc),a0
move.l (oldlevel4,pc),($70,a0)
rts
*********************************************************
***** A6 register forbidden to use (sample pointer) *****
*********************************************************
;-------------------------------
check_keyboard
move.b (keytaste,pc),d0
cmp.b #$50,d0 ** F1 down
bne.b .not_f1
clr (plot_mode)
move.l #cl1,($dff000+cop1lch)
bra panel_screenmode
.not_f1
cmp.b #$51,d0 ** F2 down
bne.b .not_f2
move #-1,(plot_mode)
move.l #cl3,($dff000+cop1lch)
bsr init_gray_palette
bra panel_screenmode
.not_f2
cmp.b #$53,d0 ** F4 down
bne.b .not_f4
clr.b (keytaste)
not (wave_off)
bne.b .f4
rts
.f4 move.l (wave_pt0,pc),a5
bsr clear_wave
move.l (wave_pt1,pc),a5
bra clear_wave
.not_f4
cmp.b #$54,d0 ** F5 down
bne.b .not_f5
clr.b (keytaste)
not (spec_off)
bne.b .f5
rts
.f5 move.l (spec_pt0,pc),a5
bsr clear_spectrum
move.l (spec_pt1,pc),a5
bra clear_spectrum
.not_f5
cmp.b #8,d0 ** 8 down
bne.b .not_8
clr.b (keytaste)
move.l #smpbuf0,a0
move.l a0,a6
move.l a0,(smppt0)
move.l #smpbuf1,(smppt1)
move.l (mainvbr,pc),a0
move.l #sample_interrupt,($70,a0)
bra panel_audio
.not_8
cmp.b #9,d0 ** 9 down
bne.b .not_9
clr.b (keytaste)
move.l #smpbuf0,a0
move.l a0,a6
move.l a0,(smppt0)
move.l #smpbuf1,(smppt1)
move.l (mainvbr,pc),a0
move.l #sample_interrupt_nosound,($70,a0)
bra panel_audio
.not_9
cmp.b #$46,d0 ** Del down
bne.b .not_del
clr.b (keytaste)
move.l (smpmode_pt,pc),a1
move.l (a1)+,d0
move.l (a1)+,a0
move.l a0,a6
move.l a0,(smppt0)
move.l (a1)+,(smppt1)
move.l (mainvbr,pc),a0
move.l d0,($70,a0)
cmp.l #smpmode_end,a1
bne.b .del_ok
lea (smpmode_1,pc),a1
.del_ok move.l a1,(smpmode_pt)
bra panel_audio
.not_del
cmp.b #1,d0 ** 1 down
bne.b .not_1
move #1,(subsampling)
move.l #spectrum_screen_full1,d1
move d1,(cl2pt+10+4)
swap d1
move d1,(cl2pt+10)
move.l #spectrum_screen_tb1,d1
move d1,(cl3pt2+6)
swap d1
move d1,(cl3pt2+2)
bra panel_freq
.not_1
cmp.b #2,d0 ** 2 down
bne.b .not_2
move #2,(subsampling)
move.l #spectrum_screen_full2,d1
move d1,(cl2pt+10+4)
swap d1
move d1,(cl2pt+10)
move.l #spectrum_screen_tb2,d1
move d1,(cl3pt2+6)
swap d1
move d1,(cl3pt2+2)
bra panel_freq
.not_2
cmp.b #3,d0 ** 3 down
bne.b .not_3
move #3,(subsampling)
move.l #spectrum_screen_full3,d1
move d1,(cl2pt+10+4)
swap d1
move d1,(cl2pt+10)
move.l #spectrum_screen_tb3,d1
move d1,(cl3pt2+6)
swap d1
move d1,(cl3pt2+2)
bra panel_freq
.not_3
cmp.b #$10,d0 ** q down
bne.b .not_q
move.l #window_rectangle,(fft_window_pt)
bra panel_window
.not_q
cmp.b #$11,d0 ** w down
bne.b .not_w
move.l #window_hamming,(fft_window_pt)
bra panel_window
.not_w
cmp.b #$12,d0 ** e down
bne.b .not_e
move.l #window_hanning,(fft_window_pt)
bra panel_window
.not_e
cmp.b #$13,d0 ** r down
bne.b .not_r
move.l #window_triangle,(fft_window_pt)
bra panel_window
.not_r
cmp.b #$14,d0 ** t down
bne.b .not_t
move.l #window_blackman,(fft_window_pt)
bra panel_window
.not_t
cmp.b #$20,d0 ** a down
bne.b .not_a
subq.l #1,(fft_logscale)
bra panel_intensity
.not_a
cmp.b #$21,d0 ** s down
bne.b .not_s
clr.l (fft_logscale)
bra panel_intensity
.not_s
rts
;-------------------------------
panel_screenmode
lea (.hilighted,pc),a5
move.l (a5),a0
moveq #7-1,d7
.loop1 not.l (a0)+
not.l (a0)+
addq.l #8,a0
dbf d7,.loop1
lea (function_panel),a0
move (plot_mode,pc),d0
bne.b .not_osc
add #128/8*(1+13),a0
bra.b .new
.not_osc
add #128/8*(1+34),a0
.new
move.l a0,(a5)
moveq #7-1,d7
.loop2 not.l (a0)+
not.l (a0)+
addq.l #8,a0
dbf d7,.loop2
rts
.hilighted dc.l function_panel+128/8*(1+13)
;-------------------------------
panel_window
lea (.hilighted,pc),a5
moveq #10,d6
move.l (a5),a0
moveq #7-1,d7
.loop1 not (a0)+
not.l (a0)+
add.l d6,a0 ;#10
dbf d7,.loop1
lea (function_panel),a0
move.l (fft_window_pt,pc),d0
cmp.l #window_rectangle,d0
bne.b .not_rect
add #128/8*(1+53)+2,a0
bra.b .new
.not_rect
cmp.l #window_hamming,d0
bne.b .not_hamm
add #128/8*(1+64)+2,a0
bra.b .new
.not_hamm
cmp.l #window_hanning,d0
bne.b .not_hann
add #128/8*(1+75)+2,a0
bra.b .new
.not_hann
cmp.l #window_triangle,d0
bne.b .not_tria
add #128/8*(1+86)+2,a0
bra.b .new
.not_tria
add #128/8*(1+97)+2,a0
.new
move.l a0,(a5)
moveq #7-1,d7
.loop2 not (a0)+
not.l (a0)+
add.l d6,a0 ;#10
dbf d7,.loop2
rts
.hilighted dc.l function_panel+128/8*(1+75)+2
;-------------------------------
panel_freq
lea (.hilighted,pc),a5
moveq #10,d6
move.l (a5),a0
moveq #7-1,d7
.loop1 not (a0)+
not.l (a0)+
add.l d6,a0 ;#10
dbf d7,.loop1
lea (function_panel),a0
move (subsampling,pc),d0
su